package com.wisecoach.gatewayplus.event;

/**
 * {@link FilteredBlockEvent} 的事件发布器，核心在于管理 所有channel的区块源
 * {@code @author:} wisecoach
 * {@code @date:} 2023/3/3 下午7:01
 * {@code @version:} 1.0.0
 */

public interface FilteredBlockEventPublisher {

    /**
     * 发布一个事件
     * @param event 区块事件
     */
    void publish(FilteredBlockEvent event);

    /**
     * 启动publisher，启动合适区块源
     */
    void start();

    /**
     * 注册监听器，只允许在start前执行
     * @param channel 要监听的通道
     * @param listener 监听器
     */
    void addListener(String channel, FilteredBlockEventListener listener);

    /**
     * 移除监听器
     * @param channel 要监听的通道
     * @param listener 监听器
     */
    void removeListener(String channel, FilteredBlockEventListener listener);

    /**
     * 清空监听器
     */
    void clearListener();

}
